package api;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import lombok.SneakyThrows;
import model.Article;
import model.UserInfo;
import util.AppVar;
import util.DBUtils;
import util.ResultUtils;
import util.SessionUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author：fish
 * @Date：2023/4/8 14:31
 */
@WebServlet("/myartlist")
public class MyArticleListServlet extends HttpServlet {
    @SneakyThrows
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Article> list = new ArrayList<>();
        String msg = "未知错误";
        //验证登录状态，从session中获取uid
        UserInfo userInfo = SessionUtils.getLoginUser(req);
        if (userInfo != null) {
            String uidStr = req.getParameter("uid");
            if (!StrUtil.isBlank(uidStr)) {
                int uid = Integer.valueOf(uidStr);
                // 查询数据库得到文章列表
                // 1.得到 Connection
                Connection connection = DBUtils.getConnection();
                // 2.拼接 sql，得到执行器
                String sql = "select * from article where uid=?";
                PreparedStatement statement = connection.prepareStatement(sql);
                // 3.设置占位符，并执行 sql
                statement.setInt(1, userInfo.getUid());
                ResultSet resultSet = statement.executeQuery();
                // 4.将查询的结果添加到容器汇总
                while (resultSet.next()) {
                    String context = resultSet.getString("context"); // 文章正文
                    Article article = new Article();
                    article.setAid(resultSet.getInt("aid"));
                    article.setTitle(resultSet.getString("title"));
                    article.setContext(context);
                    // 简介
                    int subLength = Integer.min(20, context.length());
                    article.setDesc(context.substring(0, subLength).
                            replace("#", ""));
                    String createtime = resultSet.getString("createtime");
                    article.setCreatetime(createtime.substring(0, createtime.lastIndexOf(".")));
                    article.setReadcount(resultSet.getInt("readcount"));
                    article.setUid(resultSet.getInt("uid"));
                    article.setState(resultSet.getInt("state"));
                    list.add(article);
                }
                //  关闭资源
                DBUtils.close(resultSet, statement, connection);
            } else {
                msg = "非法参数！";
            }
        }else {
            msg = "请先登录！";
        }
        //3.将结果返回给前端
        resp.setContentType(AppVar.RESPONSE_CONTENTTYPE_JSON);
        resp.getWriter().println(JSONUtil.toJsonStr(ResultUtils.toResult(
                200, list, msg)));
    }
}